﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.Siniflar;
using System.Web.Security;
using IsKurallari.Yetki;

namespace IKYSWeb.Siniflar
{
    [Serializable]
    public class YetkiAraci
    {
        public static bool YetkiliMi(EnumYetkiler eYetki, HttpResponse response)
        {
            YetkiDataSet.YetkiRow[] dr = (YetkiDataSet.YetkiRow[])AktifKullanici.KullaniciYetkileri.Yetki.Select("YetkiID = " + eYetki.GetHashCode());
            if (dr.Length == 0)
            {
                response.Redirect("/Yetki/YetkiYok.aspx");
                return false;
            }
            return true;
        }

        public static bool YetkiKontrol(EnumYetkiler eYetki)
        {
            YetkiDataSet.YetkiRow[] dr = (YetkiDataSet.YetkiRow[])AktifKullanici.KullaniciYetkileri.Yetki.Select("YetkiID = " + eYetki.GetHashCode());
            if (dr.Length == 0)
            {
                return false;
            }
            return true;
        }

        public static bool YetkilimiSayfa(EnumSayfaYetkileri eYetki)
        {
            MenuDataSet.MenuRow[] drYetkilimi = (MenuDataSet.MenuRow[])AktifKullanici.KullaniciMenuleri.Menu.Select("MenuID = " + eYetki.GetHashCode());
            if (drYetkilimi.Length == 0)
                return false;

            return true;
        }

        
        public static void GetAuthentication(FonksiyonSonuc<KullaniciDataSet> oSonuc,bool LdapIleGirisYapti = false)
        {
            AktifKullanici.KullaniciBilgisi = oSonuc.Sonuc;
            YetkiIsKurali oYetki = new YetkiIsKurali();

            //Yetkili Birimler
            FonksiyonSonuc<KullaniciYetkiliBolgeDataSet> oSonucBirimler = oYetki.KullaniciYetkiliBolgeGetirbyKullaniciID(Convert.ToInt32(((KullaniciDataSet.KullaniciRow)oSonuc.Sonuc.Kullanici.Rows[0]).KullaniciID.ToString()));
            if (!oSonucBirimler.HataVarMi)
            {
                // todo: kullanıcının Yetkili birimi varsa birimin teskilatid sini al, yoksa merkez olsun şeklinde yazılmış
                // todo: doğru mu düşünülmesi lazım
                // Taşra ise
                if (oSonucBirimler.Sonuc.KullaniciYetkiliBolge.Rows.Count > 0)
                {
                    //BIRIMPRMDataSet.BIRIMPRMRow dr =
                    //    CachePage.BirimPrmRowGetir(Convert.ToInt16(((KullaniciYetkiliBolgeDataSet.KullaniciYetkiliBolgeRow)oSonucBirimler.Sonuc.KullaniciYetkiliBolge.Rows[0]).BIRIMID.ToString()));
                    //AktifKullanici.AktifKullaniciBirim = dr.BIRIMADI;
                    //AktifKullanici.AktifKullaniciBirimID = dr.BIRIMID.ToString();
                    AktifKullanici.SessionID = Guid.NewGuid().ToString();
                    AktifKullanici.LdapIleGirisYapti = LdapIleGirisYapti;
                    BasePage.EventLogYaz("Session başladı. " + " Kullanici IP: " + HttpContext.Current.Request.UserHostAddress + " AktifKullaniciSessionID :" + AktifKullanici.SessionID + " SessionID :" + HttpContext.Current.Session.SessionID + " " + DateTime.Now.ToString() + (HttpContext.Current.Session.IsNewSession ? " Yeni Session " : " Eski Session") + HttpContext.Current.Request.Url.PathAndQuery, System.Diagnostics.EventLogEntryType.SuccessAudit);
                }
                else
                {
                    AktifKullanici.AktifKullaniciBirim = "0"; 
                    AktifKullanici.LdapIleGirisYapti = LdapIleGirisYapti;
                    AktifKullanici.AktifKullaniciBirimID = "0";
                    AktifKullanici.SessionID = Guid.NewGuid().ToString();

                    BasePage.EventLogYaz("Session başladı. " + " Kullanici IP: " + HttpContext.Current.Request.UserHostAddress + " AktifKullaniciSessionID :" + AktifKullanici.SessionID + " SessionID :" + HttpContext.Current.Session.SessionID + " " + DateTime.Now.ToString() + (HttpContext.Current.Session.IsNewSession ? " Yeni Session " : " Eski Session") + HttpContext.Current.Request.Url.PathAndQuery, System.Diagnostics.EventLogEntryType.SuccessAudit);
                }
            }
            FormsAuthentication.SetAuthCookie(((KullaniciDataSet.KullaniciRow)oSonuc.Sonuc.Kullanici.Rows[0]).KullaniciID.ToString(), false);
            HttpContext.Current.Response.Redirect(FormsAuthentication.DefaultUrl, false);
        }
    }
}